package org.example.day;

/**
 * @Description: TODO
 * @Author wyatt
 * @Data 2024/06/14 18:27
 */
//给你一个下标从 0 开始的整数数组 nums 和一个正整数 x 。
//
// 你 一开始 在数组的位置 0 处，你可以按照下述规则访问数组中的其他位置：
//
//
// 如果你当前在位置 i ，那么你可以移动到满足 i < j 的 任意 位置 j 。
// 对于你访问的位置 i ，你可以获得分数 nums[i] 。
// 如果你从位置 i 移动到位置 j 且 nums[i] 和 nums[j] 的 奇偶性 不同，那么你将失去分数 x 。
//
//
// 请你返回你能得到的 最大 得分之和。
//
// 注意 ，你一开始的分数为 nums[0] 。
//
//
//
// 示例 1：
//
// 输入：nums = [2,3,6,1,9,2], x = 5
//输出：13
//解释：我们可以按顺序访问数组中的位置：0 -> 2 -> 3 -> 4 。
//对应位置的值为 2 ，6 ，1 和 9 。因为 6 和 1 的奇偶性不同，所以下标从 2 -> 3 让你失去 x = 5 分。
//总得分为：2 + 6 + 1 + 9 - 5 = 13 。
//
//
// 示例 2：
//
// 输入：nums = [2,4,6,8], x = 3
//输出：20
//解释：数组中的所有元素奇偶性都一样，所以我们可以将每个元素都访问一次，而且不会失去任何分数。
//总得分为：2 + 4 + 6 + 8 = 20 。
//
//
//
//
// 提示：
//
//
// 2 <= nums.length <= 10⁵
// 1 <= nums[i], x <= 10⁶
//
//
// Related Topics 数组 动态规划 👍 44 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
@Deprecated
public class Solution2786 {

    public static void main(String[] args) {
        Solution2786 solution2786 = new Solution2786();
        System.out.println(solution2786.maxScore(new int[]{38,92,23,30,25,96,6,71,78,77,33,23,71,48,87,77,53,28,6,20,90,83,42,21,64,95,84,29,22,21,33,36,53,51,85,25,80,56,71,69,5,21,4,84,28,16,65,7}, 52));
    }

    public long maxScore(int[] nums, int x) {
        //相邻数字，奇偶性相同的合并 大于X的保留
        int[] mergerNums = new int[nums.length];
        boolean[] flags = new boolean[nums.length];
        int index = 0;
        mergerNums[0] = nums[0];
        flags[0] = nums[0] % 2 == 0;
        for (int i = 1; i < nums.length; i++) {
            if((nums[i] % 2 == 0 && flags[index])
                || nums[i] % 2 != 0 && !flags[index]){
                mergerNums[index] += nums[i];
            }else {
                index++;
                mergerNums[index] = nums[i];
                flags[index] = !flags[index-1];
            }
        }

        boolean last = flags[0];
        long sum = mergerNums[0];
        for (int i = 1; i < mergerNums.length; i++) {
            if(mergerNums[i] == 0){
                break;
            }

            if(flags[i] == last){
                sum += mergerNums[i];
            }else if( mergerNums[i] > x){
                sum += (mergerNums[i] - x);
                last = !last;
            }

            System.out.println(mergerNums[i]);
        }

        return sum;
    }
}
